package com.txsj.scan.utils;

import android.text.TextUtils;

/**
 * @Created by WangChuangJun on 2018/12/12
 * @Describe 对标签进行转换
 */
public class LabelUtils {


    /**
     * 获得分类号
     *
     * @param strEpc 已经去掉空格的Epc字符串
     * @return 分类号
     */
    public static long getClassId(String strEpc) {
        try {
            if (TextUtils.isEmpty(strEpc)) return 0;
            //解析
            String epcCode = strEpc.substring(9, strEpc.length());
            //分类ID
            long classId = Integer.parseInt(epcCode.substring(4, 6), 16);

            return classId;
        } catch (Exception e) {
            return -1;
        }
    }

    /**
     * 获得分组号
     *
     * @param strEpc 已经去掉空格的Epc字符串
     * @return 分组号
     */
    public static long getGroupId(String strEpc) {
        try {
            if (TextUtils.isEmpty(strEpc)) return 0;
            //解析
            String epcCode = strEpc.substring(9, strEpc.length());
            //分类ID
            long classId = Integer.parseInt(epcCode.substring(4, 6), 16);
            //流水号
            long serialNumber = Integer.parseInt(epcCode.substring(6, epcCode.length()), 16);
            //分组标签数量
            long groupTagNumber = (long) Math.pow(2, classId);
            //分组id
            long groupId = (serialNumber / groupTagNumber) + 1;

            return groupId;
        }catch (NumberFormatException e){
            return -1;//暂时这么写
        }catch (Exception e){
            return -1;
        }
    }

    /**
     * 分组流水号/分组总数
     *
     * @param strEpc 已经去掉空格的Epc字符串
     * @return 分组流水号/分组总数
     */
    public static String getSceneGroupTagNumber(String strEpc) {
        try {
            if (TextUtils.isEmpty(strEpc)) return "0";
            //解析
            String epcCode = strEpc.substring(9, strEpc.length());
            //分类ID
            long classId = Integer.parseInt(epcCode.substring(4, 6), 16);
            //场景调节数
            long sceneNumber = Integer.parseInt(epcCode.substring(0, 4), 16);
            //分组标签数量
            long groupTagNumber = (long) Math.pow(2, classId);
            //流水号
            long serialNumber = Integer.parseInt(epcCode.substring(6, epcCode.length()), 16);
            //当前场景下的流水号
            long serialTagNumber = serialNumber % groupTagNumber + 1;
            //当前场景下的每组标签数量
            long sceneGroupTagNumber = groupTagNumber - sceneNumber;

            return serialTagNumber + "/" + sceneGroupTagNumber;
        }catch (Exception e){
            return "0/0";
        }
    }

    /**
     * 分组流水号
     *
     * @param strEpc 已经去掉空格的Epc字符串
     * @return 分组流水号
     */
    public static long getSerialGroupId(String strEpc){
        try {
            if (TextUtils.isEmpty(strEpc)) return 0;
            //解析
            String epcCode = strEpc.substring(9, strEpc.length());
            //分类ID
            long classId = Integer.parseInt(epcCode.substring(4, 6), 16);

            //分组标签数量
            long groupTagNumber = (long) Math.pow(2, classId);
            //流水号
            long serialNumber = Integer.parseInt(epcCode.substring(6, epcCode.length()), 16);
            //当前场景下的流水号
            long serialTagNumber = serialNumber % groupTagNumber + 1;

            return serialTagNumber;
        }catch (Exception e){
            return 0;
        }
    }

    /**
     * 分组总数
     *
     * @param strEpc 已经去掉空格的Epc字符串
     * @return 分组总数
     */
    public static long getTotalGroup(String strEpc) {
        try {
            if (TextUtils.isEmpty(strEpc)) return 0;
            //解析
            String epcCode = strEpc.substring(9, strEpc.length());
            //分类ID
            long classId = Integer.parseInt(epcCode.substring(4, 6), 16);
            //场景调节数
            long sceneNumber = Integer.parseInt(epcCode.substring(0, 4), 16);
            //分组标签数量
            long groupTagNumber = (long) Math.pow(2, classId);
            //当前场景下的每组标签数量
            long sceneGroupTagNumber = groupTagNumber - sceneNumber;

            return sceneGroupTagNumber;
        }catch (Exception e){
            return 0;
        }
    }
}
